class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        seen = set()
        while n != 1:
            n = sum(int(d) ** 2 for d in str(n))
            if n in seen:
                return False
            seen.add(n)
        return True
    
if __name__ == "__main__":
    n = 19
    print(Solution().isHappy(n))

# 思路：
# 如果是无限循环，则为False；
# 如果是有限的，则为True；
# 注意：for n in seen：的时间复杂度是O（1），因为集合是根据哈希表进行开发的